#!/bin/bash

# 代码重复率检查脚本
# 🎯 重构说明: 检查代码重复率是否降低到5%以下
# 🔧 兼容性保证: 验证重构后的代码质量

set -e

echo "🔍 代码重复率检查"
echo "================================"

# 检查重复的类定义
echo "📋 1. 检查重复的类定义..."
DUPLICATE_CLASSES=$(grep -r "^public class\|^internal class" src/ --include="*.cj" | \
    sed 's/.*class \([A-Za-z0-9_]*\).*/\1/' | sort | uniq -d | wc -l)

echo "重复的类定义数量: $DUPLICATE_CLASSES"

# 检查重复的函数定义
echo "📋 2. 检查重复的函数定义..."
DUPLICATE_FUNCTIONS=$(grep -r "^public func\|^internal func" src/ --include="*.cj" | \
    sed 's/.*func \([A-Za-z0-9_]*\).*/\1/' | sort | uniq -d | wc -l)

echo "重复的函数定义数量: $DUPLICATE_FUNCTIONS"

# 检查重复的文件
echo "📋 3. 检查重复的文件..."
TOTAL_FILES=$(find src/ -name "*.cj" | wc -l)
UNIQUE_CONTENT=$(find src/ -name "*.cj" -exec md5sum {} \; | sort | uniq -d | wc -l)

echo "总文件数: $TOTAL_FILES"
echo "内容重复的文件数: $UNIQUE_CONTENT"

# 计算重复率
TOTAL_DUPLICATES=$((DUPLICATE_CLASSES + DUPLICATE_FUNCTIONS + UNIQUE_CONTENT))
TOTAL_ITEMS=$((TOTAL_FILES * 2))  # 假设每个文件平均有2个主要定义

if [ $TOTAL_ITEMS -gt 0 ]; then
    DUPLICATION_RATE=$(echo "scale=2; $TOTAL_DUPLICATES * 100 / $TOTAL_ITEMS" | bc -l 2>/dev/null || echo "0")
else
    DUPLICATION_RATE=0
fi

echo "================================"
echo "📊 重复率统计:"
echo "- 重复类定义: $DUPLICATE_CLASSES"
echo "- 重复函数定义: $DUPLICATE_FUNCTIONS"
echo "- 重复文件: $UNIQUE_CONTENT"
echo "- 总重复项: $TOTAL_DUPLICATES"
echo "- 估算重复率: ${DUPLICATION_RATE}%"

# 验证是否达到目标
TARGET_RATE=5.0
if [ $(echo "$DUPLICATION_RATE <= $TARGET_RATE" | bc -l 2>/dev/null || echo "1") -eq 1 ]; then
    echo "✅ 重复率检查通过！(${DUPLICATION_RATE}% <= ${TARGET_RATE}%)"
    exit 0
else
    echo "❌ 重复率检查失败！(${DUPLICATION_RATE}% > ${TARGET_RATE}%)"
    exit 1
fi
